static method - @classmethod, @staticmethod

Python에서는 static(정적) 메소드를 데코레이터로 정의 할 수 있음

@staticmethod, @classmethod를 사용한다.

이 둘의 차이점은 classmethod의 경우는 첫번째 인수가 클래스를 지정하는데 반해 staticmethod는 인수를 받지 않음!!!

따라서 상속받는 경우 동작이 다름

참고 자료


In [1]:
class foo(object):
    name = 'foo'

    @staticmethod
    def get_name_static():
        print(foo.name)

    @classmethod
    def get_name_class(cls):
        print(cls.name)

In [2]:
foo.get_name_static()


foo

In [3]:
foo.get_name_class()


foo

여기선 둘 다 동일


In [5]:
class bar(foo):
    name = 'bar'

In [6]:
bar.get_name_static()


foo

In [7]:
bar.get_name_class()


bar

In [8]:
class foo(object):
    @classmethod
    def set_name(cls, name):
        cls.name = name

class bar(foo):
    pass

In [9]:
foo.set_name("foo")
print(foo.name)
print(bar.name)

bar.set_name("bar")
print(foo.name)
print(bar.name)


foo
foo
foo
bar

In [10]:
class foo(object):
    @staticmethod
    def set_name(name):
        foo.name = name

class bar(foo):
    pass

In [11]:
foo.set_name("foo")
print(foo.name)
print(bar.name)

bar.set_name("bar")
print(foo.name)
print(bar.name)


foo
foo
bar
bar

In [ ]: